In recent years piracy of software has become a major concern of software related companies. Pirates have used borrowed and rented software to extract illicit copies of such software. How one prevents a pirate from illegally copying software is a question of "software protection". Ideally software protection should be comprehensive enough that when a potential pirate executes the program he can gain no information which will help him understand the operation of the program from the execution other than the input and output. In essence, comprehensive software protection should cause the software to act as a "black box" where only the input and output are available to all users.
Levels of software protection less than the "black box" level of protection give away information that may be useful to the pirate. For instance, even leaving a pattern of memory accesses unprotected when a program is executing gives away information about the program. Given the expense and complexity of many current software packages, there is a strong motive to prevent loss of such information to the potential pirate.
One approach proposed to protect software was presented in O. Goldreich, "Towards a Theory of Software Protection and Simulation by Oblivious RAM's", Proc. of ACM Symposium on Theory of Computing, 1987.